package rmhc.api.vk
{
	import rmhc.api.ApiWrapper;
	import rmhc.api.dataflow.AlbumInfo;
	import rmhc.api.dataflow.PhotoInfo;
	import rmhc.api.dataflow.UserInfo;
	import rmhc.api.tasks.BaseApiTask;
	import rmhc.gui.customTrace;
	import rmhc.gui.SupplyFunctions;
	//import rmhc.gui.customTrace;
	//import rmhc.gui.SupplyFunctions;

	/**
	 * Базовый класс для вызова метода АПИ ВКонтакте.
	 */
	public class VkApiTask extends BaseApiTask
	{
		protected var vkapi:VkApi;
		protected var params:Object;
		protected var method:String;
		protected var raw:Object;
		
		public function VkApiTask( wrapper:ApiWrapper , method:String , params:Object = null )
		{
			if (params == null) {
				params = { };
			}
			super( wrapper );
			this.params = params;
			this.method = method;
			this.vkapi = wrapper as VkApi;
		}
		
		public function parseData( result:Object ):void 
		{
			//здесь парсим данные, приходящие от ВКАпи
			//customTrace("VkApiTask:parseData: result = "+SupplyFunctions.objectToString(result) );
			raw = result;
			onComplete();
		}
		
		protected function parsePhotoInfo( result:Object ):PhotoInfo {
			return new PhotoInfo(result.pid, result.aid, result.owner_id, result.src, result.text, result);
		}
		protected function parseAlbumInfo( result:Object ):AlbumInfo {
			//aid, thumb_id, owner_id, title, description, created, updated, size, privacy
			return new AlbumInfo(result.aid, result.title, result.description, result.owner_id,result);
			
		}
		protected function parseUserInfo( d:Object ):UserInfo
		{
			//customTrace("VkApiTask:parseUserInfo:" +SupplyFunctions.objectToString(d));
			var u:UserInfo = new UserInfo();
			u.uid = d.uid;
			u.firstname = d.first_name;
			u.lastname = d.last_name;
			u.nickname = d.nickname;
			u.gender = d.sex;
			return u;
		}

		/*TODO: здесь методы, которые будут выдавать ВКАпи инфу о данной задаче
		(имя метода, данные,..)
		*/
		public function getMethod():String
		{
			return method;
		}
		public function getParams():Object
		{
			return params;
		}
		public function setParam( param:String , value:* ):void
		{
			params[param] = value;
		}
		override public function getRawData():Object
		{
			return raw;
		}
	}
}